


\part{Entendiendo el Simulador simusched}

\section{Ejercicio 1}

Implementamos el m\'etodo TaskCon que simula ser una tarea interactiva, que recibe los par\'ametros \verb|n|, \verb|bmin| y \verb|bmax|.

Realiza \verb|n| llamadas bloqueantes de duraci\'on entre \verb|bmin| y \verb|bmax|.

\begin{framed}
\begin{verbatimtab}
void TaskCon(vector<int> params) { // params: 3
	int n = params[0];
	int bmin = params[1];
	int bmax = params[2];
	
	for( int i = 0; i < n ; i++ ) {
		int time = bmin;
		if(bmin != bmax)
			time = (rand()%(bmax-bmin+1))+bmin;
		uso_IO(time);
	}
}
\end{verbatimtab}
\end{framed}

\section{Ejercicio 2}

Escribimos un lote de 3 tareas distintas: una intensiva en CPU y las otras dos de tipo interactivo. 
El lote lo escribimos en \verb|ejercicio2.tsk|.

\begin{framed}
\begin{verbatim}
# FILE ejercicio2.tsk
TaskCPU 10
@1
TaskCon 10 1 4
@3
TaskCon 7 1 3
\end{verbatim}
\end{framed}

Luego ejecutamos Simusched con Scheduler FCFS con los siguientes parametros:

\begin{verbatim}
./simusched ejercicio2.tsk 1 SchedFCFS | python graphsched.py > ejercicio2.png
\end{verbatim}

Y obtuvimos el siguiente diagrama de Gantt.

\begin{figure}[H]
  \centering
    \includegraphics[width=1\textwidth]{img/ejercicio2.png}
    \caption{Una tarea de uso intensivo del procesador y dos interactivas con Scheduling FCFS.}
\end{figure}

Se ve en el diagrama que las tareas se ejecutan en el orden de llegada y que al no existir desalojo en FCFS las tareas mantienen el procesador incluso al estar bloqueadas.

